//给定一个整数数组和一个整数 k ，请找到该数组中和为 k 的连续子数组的个数。 
//
// 
//
// 示例 1： 
//
// 
//输入:nums = [1,1,1], k = 2
//输出: 2
//解释: 此题 [1,1] 与 [1,1] 为两种不同的情况
// 
//
// 示例 2： 
//
// 
//输入:nums = [1,2,3], k = 3
//输出: 2
// 
//
// 
//
// 提示: 
//
// 
// 1 <= nums.length <= 2 * 10⁴ 
// -1000 <= nums[i] <= 1000 
// -10⁷ <= k <= 10⁷ 
// 
//
// 
//
// 注意：本题与主站 560 题相同： https://leetcode-cn.com/problems/subarray-sum-equals-k/ 
//
// Related Topics 数组 哈希表 前缀和 👍 189 👎 0


package LeetCode.editor.cn;


import java.util.HashMap;
import java.util.Map;

/**
 * @author ldltd
 * @date 2025-01-15 16:37:42
 * @description LCR 010.和为 K 的子数组
 
 */
 
public class QTMn0o {
    public static void main(String[] args) {
    //测试代码
    QTMn0o fun = new QTMn0o();
    Solution solution= fun.new Solution();
    solution.subarraySum(new int[]{1,2,1,2,1},3);
    }

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int subarraySum(int[] nums, int k) {
        int res=0,pre=0;
        Map<Integer,Integer> map=new HashMap<>();
        map.put(0,1);
        for (int num : nums) {
            pre+=num;
            if(map.containsKey(pre-k)){
                res+=map.get(pre-k);
            }
            map.put(pre,map.getOrDefault(pre,0)+1);
        }
        return res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
